# 入门教程
```{admonition} 本文引用的文件
:class: note
- [docs/docs/zh_CN/tutorials/basics/index.rst](../../../../products/mpython/tutorials/basics/index.rst)
- [docs/docs/zh_CN/tutorials/basics/repl.rst](../../../../products/mpython/tutorials/basics/repl.rst)
- [docs/docs/zh_CN/tutorials/basics/oled.rst](../../../../products/mpython/tutorials/basics/oled.rst)
- [docs/docs/zh_CN/tutorials/basics/neopixel.rst](../../../../products/mpython/tutorials/basics/neopixel.rst)
- [docs/docs/zh_CN/tutorials/basics/buzz.rst](../../../../products/mpython/tutorials/basics/buzz.rst)
- [docs/docs/zh_CN/tutorials/basics/buttons.rst](../../../../products/mpython/tutorials/basics/buttons.rst)
- [docs/docs/zh_CN/tutorials/basics/touchpad.rst](../../../../products/mpython/tutorials/basics/touchpad.rst)
- [docs/docs/zh_CN/tutorials/basics/sound.rst](../../../../products/mpython/tutorials/basics/sound.rst)
- [docs/docs/zh_CN/tutorials/basics/light.rst](../../../../products/mpython/tutorials/basics/light.rst)
- [docs/docs/zh_CN/tutorials/basics/accelerometer.rst](../../../../products/mpython/tutorials/basics/accelerometer.rst)
- [docs/docs/zh_CN/tutorials/basics/network/index.rst](../../../../products/mpython/tutorials/basics/network/index.rst)
- [docs/docs/zh_CN/tutorials/basics/uart.rst](../../../../products/mpython/tutorials/basics/uart.rst)
- [docs/docs/zh_CN/tutorials/basics/io/index.rst](../../../../products/mpython/tutorials/basics/io/index.rst)
- [esp32s3/docs/3_examples/basics/index.rst](../../../../products/mpython-s3/3_examples/basics/index.rst)
```
## 产品概述
本入门教程面向掌控板初学者,围绕REPL交互、OLED显示、RGB LED、音乐、按键、触摸、麦克风、光线、加速度、网络、串口与引脚等基础功能,提供循序渐进的学习路径。通过“原理说明 + 示例代码 + 动手实践”的方式,帮助读者快速上手MicroPython开发,完成从点亮LED到联网通信的完整学习闭环。
## 核心业务流程
- 连接与交互:通过USB串口建立REPL会话,进行交互式编程与调试。
- 输入感知:读取按键、触摸、声音、光线、加速度等传感器数据。
- 输出控制:在OLED上显示文本/图形,驱动RGB LED,播放音乐或蜂鸣器提示。
- 通信扩展:使用UART与其他设备通信,或通过WiFi进行网络访问(进阶)。
- 综合应用:将多模块组合,实现如“光控灯”“水平仪”“串口收发”等小项目。
```text
flowchart TD
A["启动与连接"] --> B["REPL交互"]
B --> C{"选择功能"}
C --> |显示| D["OLED显示"]
C --> |灯光| E["RGB LED"]
C --> |声音| F["音乐/蜂鸣器"]
C --> |输入| G["按键/触摸/声音/光线/加速度"]
C --> |通信| H["串口UART"]
C --> |网络| I["WiFi/HTTP(进阶)"]
D --> J["综合项目"]
E --> J
F --> J
G --> J
H --> J
I --> J
```
## 功能模块清单
- REPL:交互式命令行环境,便于快速验证代码与调试。
- OLED显示:文本、图形、图片与动画显示。
- RGB LED:板载WS2812灯珠与外部彩带控制。
- 音乐:内置旋律、自定义音符与频率控制。
- 按键:A/B按键状态读取与中断处理。
- 触摸:6个触摸焊盘读取与阈值配置。
- 麦克风:ADC采集环境声音强度。
- 光线:ADC采集环境光照强度。
- 加速度:三轴加速度与角度计算。
- 网络:WiFi连接与HTTP请求(进阶)。
- 串口:UART收发数据,对接蓝牙/外设。
- 引脚:数字/模拟I/O与PWM输出。
## 数据与状态
- 传感器数据流:传感器→ADC/总线→mpython对象→应用逻辑→输出(显示/灯光/声音/通信)。
- 关键状态:
- 按键/触摸:按下/释放、计数、事件回调。
- 显示:帧缓冲内容、刷新时机。
- 音频:播放/暂停/停止、音量、录音状态。
- 网络:连接状态、请求响应。
- 串口:发送/接收缓冲区、超时与解析。
- 数据所有权边界:
- 传感器与IO由底层驱动管理,用户通过mpython封装接口访问。
- 显示与音频需显式刷新或释放资源。
- 网络与串口需关注超时与异常处理。
## 关键约束与边界
- 硬件限制:
- ADC分辨率与量程:声音/光线为12位ADC,最大值约4095。
- 加速度计量程默认±2g,可配置范围与分辨率。
- 部分引脚复用:P4用于光线传感器、P10用于声音传感器,不可作为通用引脚。
- 软件依赖:
- 显示基于framebuf与SSD1106(ESP32)或st7789(ESP32-S3 TFT)。
- 音乐模块兼容micro:bit;ESP32支持audio编解码与TTS。
- 网络与串口依赖machine与系统驱动。
- 性能与功耗:
- 频繁刷新显示与高频采样会增加功耗与CPU占用。
- 建议按需刷新、合理延时与批量写入。
- 安全与稳定性:
- 网络请求需处理超时与异常。
- 串口通信需校验数据格式与长度。
- 中断回调函数需简洁高效,避免阻塞。
## 各主题要点与参考路径
- REPL:串口连接、行编辑、Tab补全、粘贴模式与控制命令。
- 参考:[docs/docs/zh_CN/tutorials/basics/repl.rst:1-147]
- OLED显示:文本、形状、图片与动态显示。
- 参考:[docs/docs/zh_CN/tutorials/basics/oled.rst:1-260]
- RGB LED:板载与外部彩带控制、效果演示。
- 参考:[docs/docs/zh_CN/tutorials/basics/neopixel.rst:1-144]
- 音乐:内置旋律、自编乐谱、频率控制。
- 参考:[docs/docs/zh_CN/tutorials/basics/buzz.rst:1-90]
- 按键:状态读取与中断处理。
- 参考:[docs/docs/zh_CN/tutorials/basics/buttons.rst:1-58]
- 触摸:触摸焊盘读取与阈值配置。
- 参考:[docs/docs/zh_CN/tutorials/basics/touchpad.rst:1-26]
- 麦克风:声音强度读取与显示。
- 参考:[docs/docs/zh_CN/tutorials/basics/sound.rst:1-36]
- 光线:光照强度读取与光控灯示例。
- 参考:[docs/docs/zh_CN/tutorials/basics/light.rst:1-37]
- 加速度:三轴读数、倾斜角度与水平球示例。
- 参考:[docs/docs/zh_CN/tutorials/basics/accelerometer.rst:1-145]
- 网络:基础概念与协议(TCP/UDP/HTTP/JSON)。
- 参考:[docs/docs/zh_CN/tutorials/basics/network/index.rst:1-14]
- 串口:UART构建、发送与接收。
- 参考:[docs/docs/zh_CN/tutorials/basics/uart.rst:1-111]
- 引脚:数字/模拟I/O与PWM。
- 参考:[docs/docs/zh_CN/tutorials/basics/io/index.rst:1-9]
- ESP32-S3基础示例索引(含LCD、WiFi、音频等):
- 参考:[esp32s3/docs/3_examples/basics/index.rst:1-25]
## 架构总览
```text
graph TB
subgraph "用户程序"
APP["应用逻辑
MPython脚本"]
end
subgraph "库层"
M["mpython模块
OLED/RGB/音乐/传感器/WiFi/串口"]
MB["machine/framebuf/SSD1106/NeoPixel"]
end
subgraph "驱动层"
DRV["C级驱动
modmusic/modmotion/modnetwork等"]
HW["硬件外设
OLED/RGB/传感器/音频/网络"]
end
APP --> M
M --> MB
MB --> DRV
DRV --> HW
```
## 详细组件分析
### REPL交互
- 目标:通过串口终端进入MicroPython REPL,进行即时编程与调试。
- 关键点:波特率115200、行编辑、历史记录、Tab补全、粘贴模式、Ctrl-C中断、软重启。
- 实践:打印文本、调用mpython对象显示字符、循环控制LED。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/repl.rst:1-147]
```text
sequenceDiagram
participant 用户 as "用户"
participant 终端 as "串口终端"
participant REPL as "MicroPython REPL"
用户->>终端 : 打开串口(115200)
终端->>REPL : 发送回车/命令
REPL-->>终端 : 执行并返回结果/错误
用户->>终端 : Ctrl-C中断/粘贴模式
终端-->>REPL : 取消/执行多行代码
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/repl.rst:1-147]
### OLED显示
- 目标:在128x64 OLED上显示文本、图形、图片与动画。
- 关键点:DispChar/DispChar_font、fill/show、像素/线条/矩形绘制、bitmap与blit。
- 实践:Hello World、绘制图形、加载BMP/PBM逐帧动画。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/oled.rst:1-260]
```text
flowchart TD
S["开始"] --> T["准备帧缓冲"]
T --> D["绘制文本/图形/图片"]
D --> R["刷新显示 show()"]
R --> L["循环更新/动画"]
L --> E["结束"]
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/oled.rst:1-260]
### RGB LED
- 目标:控制板载WS2812灯珠与外部彩带,实现颜色与动态效果。
- 关键点:rgb对象赋值、write()刷新、neopixel.NeoPixel初始化与效果函数。
- 实践:单灯变色、全灯填充、彩虹/弹跳/循环效果。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/neopixel.rst:1-144]
```text
classDiagram
class NeoPixel {
+__setitem__(index, color)
+write()
+fill(color)
}
class 应用 {
+设置颜色
+刷新显示
+循环效果
}
应用 --> NeoPixel : "控制"
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/neopixel.rst:1-144]
### 音乐
- 目标:播放内置旋律、自定义音符与频率变化。
- 关键点:music.play、music.pitch、music.set_tempo、内置曲目常量。
- 实践:生日歌、警笛音效、节奏调整。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/buzz.rst:1-90]
```text
flowchart TD
A["导入music"] --> B{"播放方式"}
B --> |内置旋律| C["music.play(常量)"]
B --> |自定义音符| D["music.play(列表)"]
B --> |频率控制| E["music.pitch(freq, duration)"]
C --> F["结束"]
D --> F
E --> F
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/buzz.rst:1-90]
### 按键
- 目标:读取A/B按键状态与中断处理。
- 关键点:value()判断电平、irq触发类型(下降沿/上升沿/低电平/高电平)、回调函数。
- 实践:按键开灯/关灯、中断回调控制蜂鸣器与LED。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/buttons.rst:1-58]
```text
sequenceDiagram
participant 用户 as "用户"
participant 按键 as "Button A/B"
participant 主循环 as "主程序"
participant 中断 as "IRQ回调"
用户->>按键 : 按下/释放
按键-->>主循环 : value()状态
按键-->>中断 : 触发事件
中断-->>主循环 : 执行回调(非阻塞)
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/buttons.rst:1-58]
### 触摸
- 目标:读取6个触摸焊盘(P/Y/T/H/O/N)的值与阈值配置。
- 关键点:read()原始值、config(threshold)阈值、is_pressed/was_pressed。
- 实践:触摸不同焊盘点亮不同颜色RGB灯。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/touchpad.rst:1-26]
```text
flowchart TD
S["初始化触摸"] --> R["read()读取原始值"]
R --> C{"是否超过阈值?"}
C --> |是| P["视为按下(is_pressed)"]
C --> |否| N["视为未按下"]
P --> U["执行动作(如点亮LED)"]
N --> U
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/touchpad.rst:1-26]
### 麦克风
- 目标:采集环境声音强度并显示。
- 关键点:sound.read()返回12位ADC值(0-4095)。
- 实践:实时显示声音数值,结合阈值触发LED或音乐。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/sound.rst:1-36]
```text
flowchart TD
S["循环采集"] --> R["sound.read()"]
R --> D["显示/处理数据"]
D --> T{"是否超过阈值?"}
T --> |是| A["触发动作(亮灯/发声)"]
T --> |否| W["等待下一次采集"]
A --> W
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/sound.rst:1-36]
### 光线
- 目标:采集环境光照强度并实现光控灯。
- 关键点:light.read()返回12位ADC值(0-4095),阈值判断。
- 实践:暗时亮灯、亮时灭灯。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/light.rst:1-37]
```text
flowchart TD
S["循环采集"] --> R["light.read()"]
R --> C{"是否小于阈值?"}
C --> |是| L["rgb.fill((亮度)) / write()"]
C --> |否| X["rgb.fill((0,0,0)) / write()"]
L --> W["延时/下一轮"]
X --> W
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/light.rst:1-37]
### 加速度
- 目标:读取三轴加速度并计算倾斜角度,制作水平球。
- 关键点:get_x/y/z()、roll_pitch_angle()、numberMap映射、acos/degrees计算。
- 实践:观察三轴数值变化、绘制水平球、计算角度。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/accelerometer.rst:1-145]
```text
flowchart TD
S["获取三轴加速度"] --> M["映射偏移量(numberMap)"]
M --> P["计算位置(中心+偏移)"]
P --> V{"是否在中心?"}
V --> |是| G["亮绿灯"]
V --> |否| O["灭灯"]
G --> R["刷新显示/下一轮"]
O --> R
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/accelerometer.rst:1-145]
### 网络(进阶)
- 目标:了解WiFi连接与HTTP请求基础。
- 关键点:connectWiFi/disconnectWiFi、enable_APWiFi/disable_APWiFi、HTTP GET/POST。
- 实践:连接热点、获取天气/时间、解析JSON。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/network/index.rst:1-14]
```text
sequenceDiagram
participant 应用 as "应用"
participant WiFi as "WiFi模块"
participant 服务器 as "HTTP服务器"
应用->>WiFi : connectWiFi(ssid, passwd)
WiFi-->>应用 : 连接成功/失败
应用->>服务器 : HTTP GET/POST
服务器-->>应用 : 响应数据(JSON/文本)
应用->>应用 : 解析与展示
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/network/index.rst:1-14]
### 串口
- 目标:使用UART与其他设备进行双向通信。
- 关键点:UART(id, baudrate, tx, rx)、write/readline/read、any()检测。
- 实践:与蓝牙模块配对、收发字符串/字节、显示至OLED。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/uart.rst:1-111]
```text
sequenceDiagram
participant 主控 as "掌控板"
participant UART as "UART"
participant 外设 as "蓝牙/模块"
主控->>UART : write("hello")
UART-->>外设 : 发送字节
外设-->>UART : 返回数据
UART-->>主控 : readline()/read()
主控->>主控 : 解码/显示/处理
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/uart.rst:1-111]
### 引脚
- 目标:掌握数字/模拟I/O与PWM输出。
- 关键点:PinMode.IN/OUT/PWM/ANALOG、read_digital/write_digital、read_analog/write_analog、irq中断。
- 实践:控制LED闪烁、读取传感器、PWM调光。
- 参考路径:
- [docs/docs/zh_CN/tutorials/basics/io/index.rst:1-9]
```text
flowchart TD
S["初始化Pin"] --> T{"操作类型"}
T --> |数字| D["read_digital/write_digital"]
T --> |模拟| A["read_analog/write_analog(PWM)"]
T --> |中断| I["irq(handler, trigger)"]
D --> U["应用逻辑"]
A --> U
I --> U
```
**章节来源**
- [docs/docs/zh_CN/tutorials/basics/io/index.rst:1-9]
## 依赖分析
- 模块耦合:
- mpython模块封装了OLED、RGB、音乐、传感器、网络、串口等高层API。
- machine/framebuf/SSD1106/NeoPixel等为底层支撑。
- C级驱动(modmusic/modmotion/modnetwork等)提供高性能实现。
- 外部依赖:
- 网络需要WiFi与HTTP库。
- 音频需要codec与扬声器/蜂鸣器。
- 显示需要OLED或TFT屏幕驱动。
- 潜在风险:
- 引脚复用冲突(P4/P10)。
- 高频刷新与采样导致功耗与卡顿。
- 网络超时与异常未处理导致程序卡死。
```text
graph LR
APP["应用脚本"] --> MPY["mpython模块"]
MPY --> MB["machine/framebuf/SSD1106/NeoPixel"]
MB --> DRV["C级驱动"]
DRV --> HW["硬件外设"]
APP --> NET["网络/串口"]
NET --> DRV
```
## 性能考虑
- 显示优化:批量绘制后统一show(),减少刷新次数。
- 采样策略:合理延时与阈值滤波,避免频繁读取。
- 音频控制:避免长时间阻塞播放,使用异步或定时器。
- 网络请求:设置超时与重试,解析前校验数据完整性。
- 功耗管理:关闭不用的外设,降低刷新频率与亮度。
## 故障排查指南
- REPL无响应:检查串口驱动与波特率,尝试Ctrl-D软重启。
- 显示异常:确认初始化顺序与刷新调用,检查帧缓冲大小。
- RGB无效:确认引脚与写操作,检查供电与信号线。
- 音乐无声:确认蜂鸣器/音频初始化与音量设置。
- 按键/触摸误触发:调整阈值与去抖策略。
- 串口乱码:核对波特率、TX/RX接线与编码解码。
- 网络失败:检查WiFi密码、路由器设置与DNS解析。
## 结论
本入门教程以掌控板为基础,覆盖REPL、显示、灯光、音乐、输入、传感器、通信与引脚等核心能力。通过分步实践与可视化流程,帮助读者建立完整的嵌入式开发认知。建议在掌握单项功能后,逐步组合成综合项目,进一步探索ESP32-S3的高级特性(如TFT显示、WiFi、AI模块等),拓展创客应用的边界。